home *** CD-ROM | disk | FTP | other *** search
- package sun.misc;
-
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
- import java.net.JarURLConnection;
- import java.net.SocketPermission;
- import java.net.URL;
- import java.net.URLConnection;
- import java.net.URLStreamHandler;
- import java.net.URLStreamHandlerFactory;
- import java.security.AccessController;
- import java.security.Permission;
- import java.security.PrivilegedActionException;
- import java.util.ArrayList;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.Stack;
- import java.util.StringTokenizer;
- import sun.net.www.ParseUtil;
- import sun.security.action.GetPropertyAction;
-
- public class URLClassPath {
- static final String USER_AGENT_JAVA_VERSION = "UA-Java-Version";
- static final String JAVA_VERSION = (String)AccessController.doPrivileged(new GetPropertyAction("java.version"));
- private static final boolean DEBUG = AccessController.doPrivileged(new GetPropertyAction("sun.misc.URLClassPath.debug")) != null;
- private ArrayList path;
- Stack urls;
- ArrayList loaders;
- HashMap lmap;
- private URLStreamHandler jarHandler;
-
- public URLClassPath(URL[] var1, URLStreamHandlerFactory var2) {
- this.path = new ArrayList();
- this.urls = new Stack();
- this.loaders = new ArrayList();
- this.lmap = new HashMap();
-
- for(int var3 = 0; var3 < var1.length; ++var3) {
- this.path.add(var1[var3]);
- }
-
- this.push(var1);
- if (var2 != null) {
- this.jarHandler = var2.createURLStreamHandler("jar");
- }
-
- }
-
- public URLClassPath(URL[] var1) {
- this(var1, (URLStreamHandlerFactory)null);
- }
-
- public void addURL(URL var1) {
- synchronized(this.urls) {
- if (!this.path.contains(var1)) {
- this.urls.add(0, var1);
- this.path.add(var1);
- }
- }
- }
-
- public URL[] getURLs() {
- synchronized(this.urls) {
- return (URL[])this.path.toArray(new URL[this.path.size()]);
- }
- }
-
- public URL findResource(String var1, boolean var2) {
- Loader var3;
- for(int var4 = 0; (var3 = this.getLoader(var4)) != null; ++var4) {
- URL var5 = var3.findResource(var1, var2);
- if (var5 != null) {
- return var5;
- }
- }
-
- return null;
- }
-
- public Resource getResource(String var1, boolean var2) {
- if (DEBUG) {
- System.err.println("URLClassPath.getResource(\"" + var1 + "\")");
- }
-
- Loader var3;
- for(int var4 = 0; (var3 = this.getLoader(var4)) != null; ++var4) {
- Resource var5 = var3.getResource(var1, var2);
- if (var5 != null) {
- return var5;
- }
- }
-
- return null;
- }
-
- public Enumeration findResources(String var1, boolean var2) {
- return new 1(this, var1, var2);
- }
-
- public Resource getResource(String var1) {
- return this.getResource(var1, true);
- }
-
- public Enumeration getResources(String var1, boolean var2) {
- return new 2(this, var1, var2);
- }
-
- public Enumeration getResources(String var1) {
- return this.getResources(var1, true);
- }
-
- private synchronized Loader getLoader(int var1) {
- while(this.loaders.size() < var1 + 1) {
- URL var2;
- synchronized(this.urls) {
- if (this.urls.empty()) {
- return null;
- }
-
- var2 = (URL)this.urls.pop();
- }
-
- if (!this.lmap.containsKey(var2)) {
- Loader var3;
- try {
- var3 = this.getLoader(var2);
- URL[] var4 = var3.getClassPath();
- if (var4 != null) {
- this.push(var4);
- }
- } catch (IOException var5) {
- continue;
- }
-
- this.loaders.add(var3);
- this.lmap.put(var2, var3);
- }
- }
-
- return (Loader)this.loaders.get(var1);
- }
-
- private Loader getLoader(URL var1) throws IOException {
- try {
- return (Loader)AccessController.doPrivileged(new 3(this, var1));
- } catch (PrivilegedActionException var3) {
- throw (IOException)var3.getException();
- }
- }
-
- private void push(URL[] var1) {
- synchronized(this.urls) {
- for(int var3 = var1.length - 1; var3 >= 0; --var3) {
- this.urls.push(var1[var3]);
- }
-
- }
- }
-
- public static URL[] pathToURLs(String var0) {
- StringTokenizer var1 = new StringTokenizer(var0, File.pathSeparator);
- URL[] var2 = new URL[var1.countTokens()];
- int var3 = 0;
-
- while(var1.hasMoreTokens()) {
- File var4 = new File(var1.nextToken());
-
- try {
- var4 = new File(var4.getCanonicalPath());
- } catch (IOException var7) {
- }
-
- try {
- var2[var3++] = ParseUtil.fileToEncodedURL(var4);
- } catch (IOException var6) {
- }
- }
-
- if (var2.length != var3) {
- URL[] var8 = new URL[var3];
- System.arraycopy(var2, 0, var8, 0, var3);
- var2 = var8;
- }
-
- return var2;
- }
-
- public URL checkURL(URL var1) {
- try {
- check(var1);
- return var1;
- } catch (Exception var3) {
- return null;
- }
- }
-
- static void check(URL var0) throws IOException {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- URLConnection var2 = var0.openConnection();
- Permission var3 = var2.getPermission();
- if (var3 != null) {
- try {
- var1.checkPermission(var3);
- } catch (SecurityException var6) {
- if (var3 instanceof FilePermission && var3.getActions().indexOf("read") != -1) {
- var1.checkRead(var3.getName());
- } else {
- if (!(var3 instanceof SocketPermission) || var3.getActions().indexOf("connect") == -1) {
- throw var6;
- }
-
- URL var5 = var0;
- if (var2 instanceof JarURLConnection) {
- var5 = ((JarURLConnection)var2).getJarFileURL();
- }
-
- var1.checkConnect(var5.getHost(), var5.getPort());
- }
- }
- }
- }
-
- }
-
- // $FF: synthetic method
- static Loader access$000(URLClassPath var0, int var1) {
- return var0.getLoader(var1);
- }
-
- // $FF: synthetic method
- static URLStreamHandler access$100(URLClassPath var0) {
- return var0.jarHandler;
- }
-
- // $FF: synthetic method
- static boolean access$300() {
- return DEBUG;
- }
- }
-